import axios from 'axios'
// import store from '../store'
import { getToken, removeToken } from '@/utils/auth'
import { MessageBox, Message } from 'element-ui'

// axios默认请求url
axios.defaults.baseURL = process.env.BASE_API
// axios默认超时时间
axios.defaults.timeout = 10000

//request请求拦截器
axios.interceptors.request.use(config => {
    console.log('config', config)
  if (getToken()) {
    // 让每个请求携带自定义token 请根据实际情况自行修改
    config.headers['token'] = getToken()
  }
  return config
}, error => {
  // Do something with request error
  console.log(error) // for debug
  Promise.reject(error)
})

// respone响应拦截器
axios.interceptors.response.use(
  response => {
    console.log('response ok')
    console.log(response)
    // http status未非200
    if (response.status !== 200) {
      const res = response.data
      // 50008:非法的token; 50012:其他客户端登录了;  50014:Token 过期了;
      if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
        MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
          confirmButtonText: '重新登录',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          removeToken()
          location.reload()// 为了重新实例化vue-router对象 避免bug
        })
      }
      return Promise.reject('not 200')
    } else {
      return response
    }
  },
  error => {
    // http返回状态码不为200
    console.log('error', error)
    console.log('response error', error.response)

    let msg = '系统繁忙，请稍候再试。'
    if (error.response) {
      switch (error.response.status) {
        case 401:
          removeToken()
          location.reload()// 为了重新实例化vue-router对象 避免bug
          break
        default:
          if (error.response.data.msg) {
            msg = error.response.data.msg
          }
      }
    }
    Message.error(msg)
    // 不返回会在then中处理，返回可在catch中处理
    return Promise.reject(msg)
  }
)

